/**
 * 
 */
package fr.gfi.agraf.vue.action.administrer.asso;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.util.CollectionUtils;

import fr.gfi.agraf.exception.AgrafException;
import fr.gfi.agraf.service.IUtilisateurService;
import fr.gfi.agraf.utils.PropertiesUtils;
import fr.gfi.agraf.utils.SpringFactory;
import fr.gfi.agraf.vue.action.AbstractApplicationSupportAction;
import fr.gfi.agraf.vue.action.gerer.modifiercompte.ModifierCompteAction;
import fr.gfi.agraf.vue.action.login.LoginAction;
import fr.gfi.agraf.vue.bean.ProfilDTO;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Zakaria
 *
 */
public class ModifierAssoProfilUtilisateurAction extends AbstractApplicationSupportAction {
	

	/**
	 * Logger
	 */
	private final static Logger LOGGER = Logger.getLogger(ModifierAssoProfilUtilisateurAction.class);

	/**
	 * 
	 */
	private static final long serialVersionUID = 8161623321804349855L;

	private Long utiliseurId;

	private List<Long> profilIds;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * fr.gfi.agraf.vue.action.AbstractApplicationSupportAction#executeAction()
	 */
	@Override
	public String executeAction() throws Exception {
		// créé utilisateurDTO
		final UtilisateurDTO utilisateurDTO = creerUtilisateurDTOWithProfilDTO();
		// récupere le service
		final IUtilisateurService utilisateurService = (IUtilisateurService) SpringFactory
				.getApplicationContext().getBean(LoginAction.UTILISATEUR_SERVICE);
		try {
			// appel au service
			utilisateurService.associerUtilisateurProfil(utilisateurDTO);
		} catch (final AgrafException ae) {
			// Recupére le message d'erreur
			final String messageErreur = PropertiesUtils.getProperty(ae.getKey());
			// Ajoute action error
			addActionError(messageErreur);
			LOGGER.error(messageErreur,ae);
			return ERROR;
		}
		return SUCCESS;
	}

	/**
	 * @return
	 */
	private UtilisateurDTO creerUtilisateurDTOWithProfilDTO() {
		final UtilisateurDTO utilisateurDTO = new UtilisateurDTO();
		utilisateurDTO.setId(utiliseurId);
		if (!CollectionUtils.isEmpty(profilIds)) {
			for (final Long idProfil : profilIds) {
				final ProfilDTO profil = new ProfilDTO();
				profil.setId(idProfil);
				utilisateurDTO.getListeProfilDTO().add(profil);
			}
		}
		return utilisateurDTO;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.opensymphony.xwork2.ActionSupport#validate()
	 */
	@Override
	public void validate() {
		if (utiliseurId == null || utiliseurId == 0) {
			addActionError(ModifierCompteAction.ERREUR_SAISIE_ID);
			return;
		}
		super.validate();
	}

	/**
	 * @return the utiliseurId
	 */
	public Long getUtiliseurId() {
		return utiliseurId;
	}

	/**
	 * @param utiliseurId
	 *            the utiliseurId to set
	 */
	public void setUtiliseurId(final Long utiliseurId) {
		this.utiliseurId = utiliseurId;
	}

	/**
	 * @return the profilIds
	 */
	public List<Long> getProfilIds() {
		return profilIds;
	}

	/**
	 * @param profilIds
	 *            the profilIds to set
	 */
	public void setProfilIds(final List<Long> profilIds) {
		this.profilIds = profilIds;
	}

}
